package com.feri.ssm.controller;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @Description:
 * @Author: 邢朋辉
 * @Date: 2022/11/18 11:11
 */

import com.feri.ssm.vo.R;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 文件上传的下载*/
@Controller
@RequestMapping("/api/file/")

public class FileController {
    /**
     * 文件上传
     * 有没有可能上传的文件名都一样？会出现什么问题？怎么解决？*/
    @RequestMapping("fileupload.do")
    @ResponseBody
    public R fileUp(MultipartFile file,HttpServletRequest request) throws IOException {
        //1.验证上传的文件是否为空
        if(file.isEmpty()){
            return R.fail();
        }else {
            //文件有内容
            //2.获取文件名称
            String fn=file.getOriginalFilename();
            //3.获取上传的文件内容
            byte[] data=file.getBytes();
            //4.存储上传的内容到服务器上 输出流
            //存储到发布路径  真实路径
            File f=new File(request.getServletContext().getRealPath("/"),fn);

            FileOutputStream fos=new FileOutputStream(f);
            fos.write(data);
            fos.close();

            return R.ok("http://localhost:8080/"+fn);
        }
    }
    /**
     * 一次性上传多个文件*/
    @RequestMapping("fileuploads.do")
    @ResponseBody
    public R fileUp(MultipartFile[] files,HttpServletRequest request) throws IOException {
        //1.验证
        if(files!=null && files.length>0){
            StringBuffer buffer=new StringBuffer();
            //2.遍历，挨个存储
            for(MultipartFile file:files){
                if(file.isEmpty()){
                    return R.fail();
                }else {
                    //文件有内容
                    //2.获取文件名称
                    String fn=file.getOriginalFilename();
                    //3.获取上传的文件内容
                    byte[] data=file.getBytes();
                    //4.存储上传的内容到服务器上 输出流
                    //存储到发布路径  真实路径
                    File f=new File(request.getServletContext().getRealPath("/"),fn);

                    FileOutputStream fos=new FileOutputStream(f);
                    fos.write(data);
                    fos.close();
                    buffer.append("http://localhost:8080/"+fn+",");
                }
            }
            return R.ok(buffer);
        }
        return R.fail();
    }
    /**
     * 文件下载*/
    @RequestMapping("download.do")
    public void download(int num,HttpServletResponse response) throws IOException {
        //1.设置下载的文件名
        String fn=System.currentTimeMillis()+".txt";

        //2.文件下载，必须设置响应消息头 固定的用法
        //设置响应头  告知浏览器，要以附件的形式保存内容   filename=浏览器显示的下载文件名
        response.setHeader("content-disposition","attachment;filename="+fn);

        //3.生成数据-模拟 假数据 换成数据库查询或者下载的文件内容或图片
        response.setCharacterEncoding("UTF-8");
        for (int i = 0; i <num ; i++) {
            response.getWriter().println("佳佳，你真美-"+i);
        }
        //刷新IO流
        response.getWriter().flush();
    }
}
